<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
        构造函数的使用
            1.构造函数和普通函数没有区别
              =>只不过在调用的时候 和 new 关键字连用
            2.书写构造函数，函数名首字母大写
              =>当你看到名字的时候，就知道要和 new 关键字连用
            3.调用的时候，需要和 new 关键字连用
              =>因为只有和 new 关键字连用的时候，这个函数才会有 自动创建 和 返回对象 的能力
              =>因为我们之所以书写构造函数，就是为了使用它去批量生产对象
              =>如果不和 new 关键字连用，那么改函数没有创建对象和自动返回对象的能力
            4.调用构造函数的时候，如果不需要传递参数
              =>可以不写最后的小括号
              =>但是书写规范，建议都写上小括号
            5.当你的函数名 和 new 关键字连用的时候
              =>函数内部的 this 指向当前实例（new 关键字前面的变量）
              =>我们直接在函数体内书写 this.xxx = 值
                ->就是在向自动创建出来的对象里面添加内容
            6.构造函数内部不要随便写 return
              =>当你 return 了一个基本数据类型的时候，写了白写（不会输出这个基本数据类型的数据）
              =>当你 return 了一个复杂数据类型时，构造函数白写(本身应该得到的对象得不到了，只会输出这个复杂类型的数据)
        */

        // function person(){
        //     console.log('hello world')
        // }
        // function Person(){
        //     this.name = 'jack'
        // }

        // 3.
        // var obj = new Person()
        // console.log(obj)

        // var obj2 = Person()
        // console.log(obj2)

        // 4.
        // var obj = new Person()
        // console.log(obj)
        // var obj2 = new Person
        // console.log(obj2)

        // 6
        function Person(){
            this.name = 'Jack'
            this.age = 18
            // return 基本数据类型 （没有意义，不会返回）
            // return 123

            // return 复杂数据类型
            // return [1,2,3]
        }
        var obj = new Person()
        console.log(obj)
    </script>
</body>
</html>